package parser.simbolo.operador;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;


public class Not extends Operador {

	
	public Not() {
		super("NOT", '!', 1);
		// TODO Apéndice de constructor generado automáticamente
	}

	@Override
	// Para el Not el subConjB debe ser el conjunto completo 
	public List<String> operar(List<String> subConjA, List<String> conjunto){ 
		
		Collections.sort(subConjA,this.getComparador());
		Collections.sort(conjunto,this.getComparador());
		Iterator<String> it1= subConjA.iterator();
		Iterator<String> it2= conjunto.iterator();
		List <String> resultado = new ArrayList<String>();
		String uno;
		String dos;
		if(it1.hasNext() && it2.hasNext()){
			uno = it1.next();
			dos = it2.next();
		
			do{			
				if(this.getComparador().compare(uno,dos)>=0){										
					
					if(uno.equals(dos)){						
						if(it1.hasNext()){
							uno =it1.next();
						}else{
							uno=null;
						}
						
					}else{
						resultado.add(dos);						
					}
					if(it2.hasNext()){
						dos =it2.next();
					}else{
						dos=null;
					}
					
										
				}else{
					// Si el dos es mayor avanzo en la primera
					if(it1.hasNext()){
						uno =it1.next();
					}else{
						uno=null;
					}
				}
				
			}while(uno!=null && dos!=null);	
			if(dos!=null)resultado.add(dos);
		}
		
		// a Lo sumo me van a quedar elementos en el conjunto total, nunca en el subConj
		while(it2.hasNext()) resultado.add(it2.next());
		
		return resultado;
		
		
	}
	
	public boolean isNot(){
		return true;
	}

}
